package com.nlx.notes.module.service;

import com.nlx.notes.module.bean.dto.category.CategoryDeleteDTO;
import com.nlx.notes.module.bean.dto.category.CategorySaveDTO;
import com.nlx.notes.module.bean.dto.category.CategoryUpdateDTO;
import com.nlx.notes.module.bean.vo.CategoryVO;
import com.nlx.notes.module.bean.vo.category.CategoriesVO;
import com.nlx.notes.module.entity.Categories;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * <p>
 *  服务类
 * </p>
 *
 * @author nlx
 * @since 2024-12-15
 */
public interface ICategoriesService extends IService<Categories> {

    /**
     * 获取用户的分类列表
     * @param userId 用户id
     * @return CategoryVO
     */
    List<CategoryVO> categoryList(String categoryType,Long userId);

    /**
     * 通过用户获取
     * @param userId 用户id
     * @return Categories
     */
    List<Categories> findListByUser(String categoryType,Long userId);

    /**
     * 通过分配id查询分类信息
     * @param categoryIds 分类表
     * @return Categories
     */
    Map<Long ,String> findCategoryMapByCategoryIds(Set<Long> categoryIds);

    /**
     * 通过分配id查询分类信息
     * @param categoryIds 分类表
     * @return Categories
     */
    List<CategoriesVO> findCategoryByCategoryIds(Set<Long> categoryIds);

    /**
     * 通过分类id查询分类名称
     * @param categoryId 分类id
     * @return String
     */
    String findCategoryNameMapByCategoryId(Long categoryId);

    Long findParentIdByCategoryId(Long categoryId);

    /**
     * 保存用户的分类信息
     * @param userId 用户id
     */
    boolean saveUserCategory(Long userId);

    /**
     * 删除分类
     * @param userId 用户id
     * @param categoryDeleteDTO 删除参数
     * @return CategoryVO
     */
    List<CategoryVO> deleteCategory(Long userId, CategoryDeleteDTO categoryDeleteDTO);

    /**
     * 更新分类
     * @param userId 用户id
     * @param categoryUpdateDTO 修改参数
     * @return CategoryVO
     */
    List<CategoryVO> updateCategory(Long userId, CategoryUpdateDTO categoryUpdateDTO);

    /**
     * 新增分类
     * @param userId 用户id
     * @param categorySaveDTO 新增参数
     * @return CategoryVO
     */
    CategoryVO addCategory(Long userId, CategorySaveDTO categorySaveDTO);

    Long createCategory(String categoryName,String transactionType,Long userId);

    Categories findByCateGoryCode(String categoryCode, Long userId);
}
